home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-01-09 | 2.6 KB | 128 lines | [TEXT/ttxt] |
- {$R-}
-
- {$S BeepSound } { Segment name must be the same as the command name. }
-
- UNIT DummyUnit;
-
- INTERFACE
-
- USES MemTypes, QuickDraw, OSIntf, toolIntf, hyperxcmd, sane;
-
- PROCEDURE ENTRYPOINT(paramPtr: XCmdPtr);
-
- IMPLEMENTATION
-
- TYPE Str31 = String[31];
-
- PROCEDURE BeepSnd(paramPtr: XCmdPtr); FORWARD;
-
- PROCEDURE ENTRYPOINT(paramPtr: XCmdPtr);
- BEGIN
- BeepSnd(paramPtr);
- END;
-
- PROCEDURE BeepSnd(paramPtr: XCmdPtr);
- TYPE
- T1 = RECORD
- Typ: Integer;
- Sz: Integer;
- F: ARRAY [1..100] OF RECORD
- Typ: Integer;
- Modi: LongInt;
- END;
- END;
- T2 = RECORD
- Sz: Integer;
- F: ARRAY [1..100] OF RECORD
- Cmd: Integer;
- Mod1: Integer;
- Mod2: LongInt;
- END;
- END;
- T3 = RECORD
- X: LongInt;
- N: LongInt;
- Rate: LongInt;
- St, En: LongInt;
- base: integer;
- END;
- P1 = ^T1;
- P2 = ^T2;
- P3 = ^T3;
- H1 = ^P1;
- VAR Res: H1;
- Ps: P2;
- Pt: P3;
- i,j: Integer;
- ch, fnd: boolean;
- iff: longint;
- uff: integer;
- BEGIN
- i := 0;
- while true do begin
- i := i+1;
- handle(res) := get1indresource ('snd ', i);
- ch := false;
- uff := 0;
- if res = nil then exit(beepsnd);
- if (res^^.typ = 1) OR (res^^.typ = 2) then begin
- IF Res^^.Typ = 2 then begin
- res^^.Typ := 1;
- res^^.Sz := 0;
- ch := true;
- end;
- fnd := false;
- for j := 1 to res^^.sz do
- if res^^.f[j].Typ in [1,3,5,7,9] then
- fnd := true;
- if not fnd then begin
- res^^.sz := res^^.sz+1;
- iff := munger (handle(res), 4, nil,0,@iff, 6);
- uff := uff+6;
- res^^.f[1].Typ := 5;
- res^^.f[1].Modi := 0;
- end;
- hlock(handle(res));
- ptr(Ps) := ptr(ord4(res^)+4+6*res^^.sz);
- if (ps^.sz = 1) &
- ((ps^.f[1].cmd = $8050) | (ps^.f[1].cmd = $8051)) then begin
- ps^.f[1].cmd := $8050;
- uff := uff+8;
- hUnlock(handle(res));
- iff := munger (handle(res), 6+6*res^^.sz+8, nil,0,@iff, 8);
- hlock(handle(res));
- ptr(Ps) := ptr(ord4(res^)+4+6*res^^.sz);
- ptr(pt) := ptr(uff+ps^.f[1].Mod2 + ord4(res^));
- Ps^.sz := 2;
- Ps^.f[2].Cmd := 40;
- Ps^.f[2].mod1 := num2integer(2000.0 * Pt^.N * exp2 ((pt^.base-60.0)/12.0) * (65536.0 / Pt^.Rate));
- Ps^.f[2].Mod2 := $FF00003C; (* middle c *)
- if (pt^.st = 0) & (pt^.en = 0) then begin
- pt^.en := pt^.n - 1;
- pt^.st := pt^.en - 1;
- end;
- ch := true;
- end;
- for j := 1 to ps^.sz do
- if ps^.f[j].cmd < 0 then begin
- ch := true;
- ps^.f[j].Mod2 := ps^.f[j].Mod2 + uff;
- end;
- hUNlock(handle(res));
- if ch then begin
- changedresource(handle(res));
- writeresource(handle(res));
- end;
- end;
- end;
- END;
-
- END.
-
-
-
- (* compile and link:
- pascal beepsnd.p -i "{XCMDs}"
- link -o 80:HyperSound -rt XCMD=1 -sg BeepSound=Main,SANELib -m ENTRYPOINT BeepSnd.p.o {libraries}interface.o {plibraries}sanelib.o
- *)
-